package com.yt.product.service;

import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Date;

import com.yt.product.common.config.YmlConfig;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yt.product.mapper.CustomerInfoMapper;
import com.yt.product.models.service.ICustomerInfoService;
import com.yt.product.models.bo.CustomerInfoSaveBO;
import com.yt.product.models.dto.CustomerInfoDTO;
import com.yt.common.exception.BusinessException;
import com.yt.common.enums.CodeEnum;

@DubboService
public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, CustomerInfoDTO> implements ICustomerInfoService {

    @Resource
    private YmlConfig ymlConfig;

    @Override
    public boolean add(CustomerInfoSaveBO saveBO) {
        // 1. 参数校验
        validateCustomerSaveBO(saveBO);

        // 2. BO转换为DTO
        CustomerInfoDTO dto = new CustomerInfoDTO();
        BeanUtils.copyProperties(saveBO, dto);

        // 3. 设置默认值（确保所有字段都有值）
        setCustomerDefaultValues(dto);

        // 4. 生成并设置主键ID
        Long id = ymlConfig.getPkId();

        dto.setId(id);

        // 5. 插入数据库
        boolean success = this.insert(dto);

        return success;
    }

    /**
     * 客户信息参数校验
     */
    private void validateCustomerSaveBO(CustomerInfoSaveBO saveBO) {
        if (saveBO == null) {
            throw new BusinessException(CodeEnum.FAIL_100001.getCode(), "客户信息不能为空");
        }
        if (saveBO.getCustomerName() == null || saveBO.getCustomerName().trim().isEmpty()) {
            throw new BusinessException(CodeEnum.FAIL_100002.getCode(), "客户姓名/企业名称不能为空");
        }
        if (saveBO.getPhone() == null || saveBO.getPhone().trim().isEmpty()) {
            throw new BusinessException(CodeEnum.FAIL_100003.getCode(), "客户联系电话不能为空");
        }
        // 校验客户类型（0-个人，1-企业）
        if (saveBO.getType() == null || (!"0".equals(saveBO.getType()) && !"1".equals(saveBO.getType()))) {
            throw new BusinessException(CodeEnum.FAIL_100004.getCode(), "客户类型必须为0（个人）或1（企业）");
        }
    }

    /**
     * 设置客户信息默认值
     */
    private void setCustomerDefaultValues(CustomerInfoDTO dto) {
        // 乐观锁版本号默认0
        dto.setRevision(dto.getRevision() != null ? dto.getRevision() : 0);

        // 逻辑删除默认未删除（0）
        dto.setIsDel(dto.getIsDel() != null ? dto.getIsDel() : 0);

        // 状态默认正常（1）
        dto.setStatus(dto.getStatus() != null ? dto.getStatus() : 1);

        // 创建时间和更新时间默认当前时间
        Date now = new Date();
        dto.setCreateTime(dto.getCreateTime() != null ? dto.getCreateTime() : now);
        dto.setUpdateTime(dto.getUpdateTime() != null ? dto.getUpdateTime() : now);
    }
}
